package com.zjpavt.client.job.util;

import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import static org.quartz.TriggerBuilder.newTrigger;

/**
 * 用来获取一个quarz框架中的触发器
 *
 * @author cjp
 */
public class TriggerUtil {

    /**
     * @return 获取一个每天执行的Trigger，如每天0h0m0s执行(刷新离线指令)
     */
    public static CronTrigger getDailyTrigger(int hour, int minute, int second) {
        StringBuilder cronStr = new StringBuilder();
        String space = " ";
        cronStr.append(second)
        .append(space)
        .append(minute)
        .append(space)
        .append(hour)
        .append(" * * ?");
        return newTrigger()
               .withSchedule(CronScheduleBuilder.cronSchedule(cronStr.toString()))
               .build();
    }

    /**
     * @return 获取一个具体时间执行的Trigger 如x年y月z日0h0m0s执行
     */
    public static CronTrigger getTrigger(int year, int month, int day, int hour, int minute, int second) {
        StringBuilder cronStr = new StringBuilder();
        String space = " ";
        cronStr.append(second)
        .append(space)
        .append(minute)
        .append(space)
        .append(hour)
        .append(space)
        .append(day)
        .append(space)
        .append(month)
        .append(space)
        .append("?")
        .append(space)
        .append(year);
        //星期和日期不能同时指定，其中一个必须为*
        return newTrigger()
               .withSchedule(CronScheduleBuilder.cronSchedule(cronStr.toString()))
               .build();
    }

    /**
     * @return 通过时间戳获取一个Trigger
     */
    public static Trigger getTrigger(long startTime) throws ParseException {
        return TriggerBuilder.
        newTrigger()
        .startAt(transForDate(startTime))
        .build();
    }

    /**
     * @return 通过日期获取一个Trigger（注意：日期必须有年月日时分秒（否则直接执行））
     */
    public static Trigger getTrigger(Date startTime) throws ParseException {
        return TriggerBuilder.
        newTrigger()
        .startAt(startTime)
        .build();
    }

    private static Date transForDate(Long time) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date temp = null;
        if (time != null) {
            String str = sdf.format(time);
            temp = sdf.parse(str);
        }
        return temp;
    }
}
